E) Recusion and Tail Recursion

Recursion Factorial function
int factorial(int n){
if(n==1) return 1;
return n*factorial(n-1);
}
Tail Recursion Factorial function
꼬리 재귀(Tail Recursion)은 재귀 호출이 끝나면 아무 연산도 하지 않고 결과만 바로 반환하는 재귀 함수를 뜻한다.

재귀 함수가 꼬리 재귀 방식으로 구현되고,
컴파일러가 꼬리 재귀 최적화를 지원할 경우,

컴파일러는 꼬리 재귀 함수를 반복문으로 변경하기에 스택에서 낭비되는 메모리를 피할 수 있다.
int factorial(int n, total=1){
if(n==1) return total;
return factorial(n-1, n*total);
}
int factorial(int n){
int total=1;
do{
if(n==1) return total;
total=total*n;
n--;
} while(true);
}